package org.fuys.coder.domain.signup.service.point;

import org.fuys.coder.common.exception.BusinessException;
import org.fuys.coder.infrastructure.model.dto.UserDTO;

/**
 * @projectName: fuys-low-coder
 * @package: org.fuys.coder.domain.common.policy.point
 * @className: AbstractPointPolicy
 * @author: WangJing
 * @description: 抽象类 更加规范Policy的接口 毕竟现在积分系统不复杂的情况下 只需要修改积分值即可
 * @date: 2024/6/20 16:16
 * @version: 1.0
 */
public abstract class AbstractPointPolicy implements Policy {

    @Override
    public Object execute(Object... args) throws Exception {
        //这里通过参数数量和值来判断采用什么实现方法 这样在之后的更改中 只需要更改通用的Abstract类即可
        if(args.length>3){
            throw new BusinessException("策略参数出错 在抽象积分策略中 参数数量不该大于3!");
        }
        if(args.length==2){
            //第一个为UserVo 第二个为积分的值
            addPoint((UserDTO) args[0],(Integer)args[1]);
        }
        return null;
    }

    protected abstract void addPoint(UserDTO userVo, Integer point);

}
